//只针对某个具体的模块打包

const fs = require('fs')//文件操作
const execa = require('execa')//开启子进程，最终还是使用rollup打包

const targets = fs.readdirSync('packages').filter((f) => {
    if (!fs.statSync(`packages/${f}`).isDirectory()) {
        return false
    }
    return true
})//不加filter就是在根目录下的packages中找到所有的包目录和文件，filter可以过滤掉不是目录的文件
console.info(`找到的所有包名-------->`, targets)
const target = 'reactivity'//打包哪个模块就写哪个模块的名称

//找到目标后，我们需要依次并行打包之
//打包函数，使用rollup进行打包
async function build(target) {
    console.info(`需要打包的目标有--------->`, target)
    // rollup -cw --environment "TARGET":xxxx (TARGET这个名字可以随便起，rollup.config.js里引用时对应上即可)  -cw可以一直监视文件是否有变化，有变化则自动打包
    await execa("rollup", ["-cw", "--environment", `TARGET:${target}`], { stdio: "inherit" })//stdio:"inherit"子进程打包的信息共享给父进程
}

// build(target)

//并行打包函数
function runParallel(targets, iteratorFn) {//iteratorFn是迭代函数
    let res = []
    for (const iterator of targets) {
        const p = iteratorFn(iterator)//每个打包的过程都是一个promise
        res.push(p)
    }
    return Promise.all(res)//返回所有异步打包对象
}

// //并行打包所有目标，没打包一个模块执行一次build
runParallel(targets, build)
